import KoaRouter from 'koa-router'
import fs from 'fs'
import path from 'path'

const router = new KoaRouter()

// 封装递归
// 如果在js环境的话就可以使用 require-directory 第三方库
function loadRoutes(filePath: string) {
  //将当前目录下 都读出来
	const files = fs.readdirSync(filePath)
  // 过滤
	files.filter(file => {
    //读取的时候会将当前目录的 index.js 也读取出来，这个不需要，如果拿到别的地方可以不加这个判断
		if(filePath !== __dirname && file === 'index.ts'){
			console.log("routes module must not be 'index.ts' " )
		}
		return file !== 'index.ts'
	}).forEach(async file => {
    let newFilePath = path.join(filePath, file)
    // 是目录
    if(fs.statSync(newFilePath).isDirectory()){
      loadRoutes(newFilePath) // 递归
    } else { 
      // 方式一：使用require，但是这样的话，每个routes文件必须是module.exports = router
      // let route = require(newFilePath)
      // router.use(res.router.routes())
      // router.use(res.router.allowedMethods())


      // 因为该项目主要采用es6来写，所以我们还是用es的方式来导入
      // 方式二：使用import() 和 export { router }, 每个routes文件就需要使用 export { router } 导出
      // const res = await import(newFilePath)
      // router.use(res.router.routes())
      // router.use(res.router.allowedMethods())

      // 方式三：使用import() 和 export default router, 每个routes文件就需要使用 export default router 导出
      const res = await import(newFilePath)
      router.use(res.default.routes())
      router.use(res.default.allowedMethods())
    }
  })
}
//启动
loadRoutes(__dirname)

module.exports = router